home *** CD-ROM | disk | FTP | other *** search
- (*
- * $DESCRIPTION: Bumps Oberon-A module revisions $
- * $AUTHOR: Johan Ferreira $
- *)
-
- <*STANDARD-*>
-
- MODULE OBumpRev;
-
- IMPORT SYSTEM, Exec, Dos, Timer, Utility, IO := BufIO, Strings, OBumpRevRev, Msg := OBumpRevMsg, Kernel;
-
-
- CONST moduleOpt = 0;
- versionOpt = 1;
- revisionOpt = 2;
- logExtOpt = 3;
- revModExtOpt = 4;
- modExtOpt = 5;
- noLogOpt = 6;
- dateOnlyOpt = 7; (* added by fjc *)
- numOfArgs = 8;
-
- defLogExt = ".revlog";
- defRevModExt = "Rev.mod";
- defModExt = ".mod";
- defDateOnly = FALSE; (* added by fjc *)
-
- programName = "OBumpRev";
-
-
- TYPE LongIntPtr = POINTER [2] TO ARRAY 1 OF LONGINT;
-
-
- VAR modrevfh, logfh, modfh: Dos.FileHandlePtr;
-
- author, logname, module, logext, modrevext, modext: Exec.LSTRPTR;
- day, month, year: LONGINT;
- version, revision: LONGINT;
- dateOnly : BOOLEAN; (* added by fjc *)
-
- argarray: ARRAY numOfArgs OF SYSTEM.LONGWORD;
- argresult: Dos.RDArgsPtr;
- prgname: Exec.LSTRPTR;
- cleanup: PROCEDURE (rc: LONGINT);
-
- bool, modrevexists, nolog: BOOLEAN;
- ch: CHAR;
- li: LONGINT;
- liptr: LongIntPtr;
- strptr: Exec.LSTRPTR;
-
-
- PROCEDURE ReadLongInt* (fh: Dos.FileHandlePtr; VAR x: LONGINT): BOOLEAN;
- VAR ch: CHAR;
- d: LONGINT;
- neg: BOOLEAN;
- BEGIN
- x := 0; IO.Read (fh, ch);
- neg := FALSE;
- IF ch = "-" THEN neg := TRUE; IO.Read (fh, ch) END;
- LOOP
- CASE ch OF
- 0X, ";": IF neg THEN x := -x END; RETURN TRUE
- | "0".."9":
- d := ORD (ch) - ORD ("0");
- IF (MAX (LONGINT) - d) DIV 10 >= x THEN x := 10*x+d ELSE EXIT END
- ELSE EXIT
- END;
- IO.Read (fh, ch);
- END;
- RETURN FALSE;
- END ReadLongInt;
-
-
- PROCEDURE PrintFault (msg: LONGINT);
- BEGIN
- strptr := Msg.GetString (msg);
- IF msg = 0 THEN
- IF Dos.PrintFault (Dos.IoErr (), prgname^) THEN END
- ELSE
- IO.WriteF1 (NIL, strptr^, prgname)
- END
- END PrintFault;
-
-
- PROCEDURE OpenFile (VAR fh: Dos.FileHandlePtr; mode: LONGINT; name, extension: Exec.LSTRPTR);
- VAR filename: Exec.LSTRPTR;
- BEGIN
- SYSTEM.NEW (filename, 32);
- COPY (name^, filename^); Strings.Append (extension^, filename^);
- fh := Dos.Open (filename^, mode)
- END OpenFile;
-
-
- PROCEDURE CloseFile (VAR fh: Dos.FileHandlePtr; halt: BOOLEAN);
- BEGIN
- IF fh # NIL THEN
- IF ~ Dos.Close (fh) THEN
- fh := NIL;
- PrintFault (Msg.msgCouldNotClose);
- IF halt THEN HALT (Dos.error) END
- END;
- fh := NIL
- END;
- END CloseFile;
-
-
- PROCEDURE WriteRevMod ();
- BEGIN
- OpenFile (modrevfh, Dos.newFile, module, modrevext);
- IF modrevfh = NIL THEN
- PrintFault (Msg.msgCouldNotCreateModRev);
- HALT (Dos.fail)
- ELSE
- IF ~ modrevexists THEN
- strptr := Msg.GetString (Msg.msgCreated);
- IO.WriteF3 (NIL, strptr^, prgname, module, modrevext)
- END
- END;
-
- strptr := Msg.GetString (Msg.msgRevModContents);
- IF Dos.FPrintf (modrevfh, strptr^,
- SYSTEM.ADR (OBumpRevRev.vers),
- module,
- version,
- revision,
- day,month,year,
- module,version,revision,
- module,version,revision,day,month,year,
- module,version,revision,day,month,year,
- module) = -1 THEN
- PrintFault (Msg.msgCouldNotWriteModRev);
- HALT (Dos.fail)
- END;
-
- CloseFile (modrevfh, TRUE)
- END WriteRevMod;
-
-
- PROCEDURE WriteLog();
- VAR modsize: LONGINT;
- BEGIN
- (* Open log file *)
- OpenFile (logfh, Dos.readWrite, module, logext);
- IF logfh = NIL THEN
- OpenFile (logfh, Dos.newFile, module, logext);
- IF logfh = NIL THEN
- strptr := Msg.GetString (Msg.msgCouldNotCreate);
- IO.WriteF3 (NIL, strptr^, prgname, module, logext)
- ELSE
- strptr := Msg.GetString (Msg.msgCreated);
- IO.WriteF3 (NIL, strptr^, prgname, module, logext)
- END
- END;
-
- (* Write log *)
- IF logfh # NIL THEN
-
- (* Get #?.mod size *)
- OpenFile (modfh, Dos.oldFile, module, modext);
- IF modfh # NIL THEN
- modsize := Dos.Seek (modfh, 0, Dos.end);
- modsize := Dos.Seek (modfh, 0, Dos.end);
- CloseFile (modfh, TRUE)
- ELSE
- modsize := 0
- END;
-
- strptr := Msg.GetString (Msg.msgAuthor);
- IF Dos.GetVar (strptr^, author^, 30, {}) = -1 THEN author := SYSTEM.ADR ("") END;
-
- li := Dos.Seek (logfh, 0, Dos.end); (* Append *)
- strptr := Msg.GetString (Msg.msgLog);
- IF Dos.FPrintf (logfh, strptr^,
- module, version, revision, day, month, year, modsize, author) = -1 THEN
- PrintFault (Msg.msgCouldNotWriteLog);
- HALT (Dos.fail)
- END
- END;
-
- CloseFile (logfh, TRUE)
- END WriteLog;
-
-
- PROCEDURE GetVersRev ();
- BEGIN
- OpenFile (modrevfh, Dos.oldFile, module, modrevext);
- modrevexists := modrevfh # NIL;
-
- (* Version *)
- IF SYSTEM.VAL (LongIntPtr, argarray[versionOpt]) # NIL THEN
- liptr := SYSTEM.VAL (LongIntPtr, argarray[versionOpt]);
- version := liptr[0]
- ELSE
- IF modrevexists THEN
- REPEAT IO.Read (modrevfh, ch)
- UNTIL ch = "="; IO.Read (modrevfh, ch);
- IF ~ ReadLongInt (modrevfh, version) THEN
- version := 0
- END
- ELSE version := 0
- END
- END;
-
- (* Revision *)
- IF SYSTEM.VAL (LongIntPtr, argarray[revisionOpt]) # NIL THEN
- liptr := SYSTEM.VAL (LongIntPtr, argarray[revisionOpt]);
- revision := liptr[0]
- ELSE
- IF modrevexists THEN
- REPEAT IO.Read (modrevfh, ch)
- UNTIL ch = "="; IO.Read (modrevfh, ch);
- IF ~ ReadLongInt (modrevfh, revision) THEN
- revision := 0
- END
- ELSE revision := 0
- END;
- IF ~dateOnly THEN (* test added by fjc *)
- INC (revision) (* Bump revision *)
- END;
- END;
-
- CloseFile (modrevfh, TRUE)
- END GetVersRev;
-
-
- PROCEDURE GetDate;
- VAR
- timeReqPtr: Timer.TimeRequestPtr;
- sysTime: Timer.TimeVal;
- success: BOOLEAN;
- clockData: Utility.ClockData;
- (* timerBase: Timer.TimerBasePtr; *)
- BEGIN
- success := FALSE;
- NEW (timeReqPtr);
- IF timeReqPtr # NIL THEN
- IF Exec.OpenDevice (Timer.timerName, Timer.vBlank, timeReqPtr, {}) = 0 THEN
- Timer.base := timeReqPtr.node.device;
- Timer.GetSysTime (sysTime);
- Exec.CloseDevice (timeReqPtr);
- success := TRUE
- END
- END;
- IF ~success THEN
- HALT (20)
- END;
- Utility.Amiga2Date (sysTime.secs, clockData);
- day := clockData.mday;
- month := clockData.month;
- year := clockData.year MOD 100 (* only two digits for the year :-( *)
- END GetDate;
-
-
- PROCEDURE ParseArgs ();
- BEGIN
- FOR li := 0 TO numOfArgs-1 DO
- argarray[li] := NIL
- END;
- argarray[logExtOpt] := SYSTEM.ADR (defLogExt);
- argarray[revModExtOpt] := SYSTEM.ADR (defRevModExt);
- argarray[modExtOpt] := SYSTEM.ADR (defModExt);
- argarray[dateOnlyOpt] := defDateOnly; (* added by fjc *)
-
- strptr := Msg.GetString (Msg.msgTemplate);
- argresult := Dos.OldReadArgs (strptr^, argarray, NIL);
-
- IF argresult = NIL THEN
- PrintFault (0);
- HALT (Dos.fail)
- END;
-
- module := SYSTEM.VAL (Exec.LSTRPTR, argarray[moduleOpt]);
- logext := SYSTEM.VAL (Exec.LSTRPTR, argarray[logExtOpt]);
- modrevext := SYSTEM.VAL (Exec.LSTRPTR, argarray[revModExtOpt]);
- modext := SYSTEM.VAL (Exec.LSTRPTR, argarray[modExtOpt]);
- nolog := SYSTEM.VAL (LONGINT, argarray[noLogOpt]) # 0;
- (* added by fjc *)
- dateOnly := SYSTEM.VAL (LONGINT, argarray[dateOnlyOpt]) # 0
- END ParseArgs;
-
-
- PROCEDURE WriteCopyright ();
- BEGIN
- strptr := Msg.GetString (Msg.msgCopyright);
- IO.WriteF1 (NIL, strptr^, SYSTEM.ADR (OBumpRevRev.vers))
- END WriteCopyright;
-
-
- PROCEDURE *Close (VAR rc : LONGINT);
- BEGIN
- Msg.CloseCatalog ();
- Dos.FreeArgs (argresult);
- CloseFile (modrevfh, FALSE);
- CloseFile (logfh, FALSE);
- CloseFile (modfh, FALSE)
- END Close;
-
-
- PROCEDURE Init ();
- BEGIN
- modrevfh := NIL; logfh := NIL; modfh := NIL;
- modrevexists := TRUE;
- Kernel.SetCleanup (Close);
- ASSERT (Utility.base # NIL, 100); (* Must open *)
- Msg.OpenCatalog (NIL, "");
-
- SYSTEM.NEW (author, 32);
- SYSTEM.NEW (logname, 32);
- SYSTEM.NEW (module, 32);
- SYSTEM.NEW (logext, 32);
- SYSTEM.NEW (modrevext, 32);
- SYSTEM.NEW (modext, 32);
- SYSTEM.NEW (prgname, 32);
-
- IF ~ Dos.GetProgramName (prgname^, 30) THEN prgname := SYSTEM.ADR (programName) END;
- END Init;
-
-
- BEGIN Init ();
- WriteCopyright ();
- ParseArgs ();
-
- GetDate ();
- GetVersRev ();
- WriteRevMod ();
- IF ~ nolog THEN WriteLog () END;
- strptr := Msg.GetString (Msg.msgBumpedTo);
- IO.WriteF4 (NIL, strptr^, prgname, module, version, revision)
- END OBumpRev.
-
-